#ifndef DRI_SPI_H
#define DRI_SPI_H

#include "main.h"

/* SPI2 引脚定义 */
#define SPI2_SCK_PIN        GPIO_Pin_10
#define SPI2_SCK_PORT       GPIOB
#define SPI2_MISO_PIN       GPIO_Pin_2
#define SPI2_MISO_PORT      GPIOC
#define SPI2_MOSI_PIN       GPIO_Pin_3
#define SPI2_MOSI_PORT      GPIOC

/* W25Q128 片选引脚定义 */
#define F_CS1_PIN           GPIO_Pin_0
#define F_CS1_PORT          GPIOC
#define F_CS2_PIN           GPIO_Pin_1
#define F_CS2_PORT          GPIOC

/**
 * @brief 初始化SPI2
 */
void Dri_SPI_Init(void);

/**
 * @brief 启动SPI2
 */
void Dri_SPI_Start(void);

/**
 * @brief 停止SPI2
 */
void Dri_SPI_Stop(void);

/**
 * @brief SPI2发送并接收一个字节
 * @param data 要发送的数据
 * @return 接收到的数据
 */
uint8_t Dri_SPI_SwapByte(uint8_t data);

/**
 * @brief SPI2发送并接收数据
 * @param pTxData 发送数据指针
 * @param pRxData 接收数据指针
 * @param Size 数据长度
 */
void Dri_SPI_TransmitReceive(uint8_t* pTxData, uint8_t* pRxData, uint16_t Size);

/**
 * @brief 片选控制
 * @param cs_port 片选端口
 * @param cs_pin 片选引脚
 * @param state 1-拉高(取消选择), 0-拉低(选择)
 */
void Dri_SPI_CS_Control(GPIO_TypeDef* cs_port, uint16_t cs_pin, uint8_t state);

#endif
